// #include <QApplication>
// #include <QDebug>
// #include <QDialog>
// #include <QHBoxLayout>
// #include <QPushButton>
// #include <QVBoxLayout>
// #include <vector>

// // 模式状态栏
// class StateDialog : public QDialog {
//   Q_OBJECT

//  public:
//   StateDialog(QWidget* parent = nullptr) : QDialog(parent) {
//     setWindowTitle("UI State Test");

//     mainLayout = new QVBoxLayout(this);
//     buttonLayout1 = new QHBoxLayout();
//     buttonLayout2 = new QHBoxLayout();
//     buttonLayout3 = new QHBoxLayout();

//     mainLayout->addLayout(buttonLayout1);
//     mainLayout->addLayout(buttonLayout2);
//     mainLayout->addLayout(buttonLayout3);

//     setLayout(mainLayout);

//     int x = 300;
//     int y = 10;
//     move(x, y);
//   }
//   ~StateDialog() {}

//   // 初始化
//   void init() {
//     // Clear existing buttons
//     clearButtons();

//     // 选择模式对应文本
//     std::vector<QString> texts;
//     for (size_t i = 0; i < (int)qbe::drawingBoard::SelectModeType::Num; i++) {
//       qbe::drawingBoard::SelectModeType mode = qbe::drawingBoard::SelectModeType(i);
//       qbe::drawingBoard::AllModeType mode_all = mode;
//       std::string text = qbe::drawingBoard::State::modeToString(mode_all);
//       texts.push_back(QString::fromStdString(text));
//     }

//     // 选择模式对应按钮
//     for (auto& text : texts) {
//       QPushButton* button = new QPushButton(text, this);
//       button->setEnabled(false);

//       // 点击时发送切换对应模式事件
//       connect(button, &QPushButton::clicked, this, [this, button, text]() {
//         auto instance = TransferStation::Instance();
//         auto& bus = instance->get_bus(0);

//         qbe::drawingBoard::SwitchModeEvent event;
//         event.mode = qbe::drawingBoard::State::stringToMode(text.toStdString());

//         bus.send(event);
//       });

//       buttonLayout1->addWidget(button);
//       button_map[text] = button;
//     }

//     // 绘制模式文本
//     texts.clear();
//     for (size_t i = 0; i < (int)qbe::drawingBoard::DrawingModeType::Num; i++) {
//       qbe::drawingBoard::DrawingModeType mode = qbe::drawingBoard::DrawingModeType(i);
//       qbe::drawingBoard::AllModeType mode_all = mode;
//       std::string text = qbe::drawingBoard::State::modeToString(mode_all);
//       texts.push_back(QString::fromStdString(text));
//     }

//     for (auto& text : texts) {
//       QPushButton* button = new QPushButton(text, this);
//       button->setEnabled(false);

//       connect(button, &QPushButton::clicked, this, [this, button, text]() {
//         auto instance = TransferStation::Instance();
//         auto& bus = instance->get_bus(0);

//         qbe::drawingBoard::SwitchModeEvent event;
//         event.mode = qbe::drawingBoard::State::stringToMode(text.toStdString());

//         bus.send(event);
//       });

//       buttonLayout2->addWidget(button);
//       button_map[text] = button;
//     }

//     // 编辑模式文本
//     texts.clear();
//     for (size_t i = 0; i < (int)qbe::drawingBoard::EditingModeType::Num; i++) {
//       qbe::drawingBoard::EditingModeType mode = qbe::drawingBoard::EditingModeType(i);
//       qbe::drawingBoard::AllModeType mode_all = mode;
//       std::string text = qbe::drawingBoard::State::modeToString(mode_all);
//       texts.push_back(QString::fromStdString(text));
//     }

//     for (auto& text : texts) {
//       QPushButton* button = new QPushButton(text, this);
//       button->setEnabled(false);

//       connect(button, &QPushButton::clicked, this, [this, button, text]() {
//         auto instance = TransferStation::Instance();
//         auto& bus = instance->get_bus(0);

//         qbe::drawingBoard::SwitchModeEvent event;
//         event.mode = qbe::drawingBoard::State::stringToMode(text.toStdString());

//         bus.send(event);
//       });

//       buttonLayout3->addWidget(button);
//       button_map[text] = button;
//     }
//   }

//   // 接收消息
//   void updateButtonStates() {
//     auto instance = TransferStation::Instance();
//     auto& bus = instance->get_bus(0);

//     auto change_event = bus.receive<qbe::drawingBoard::ModeStateChangeEvent>();

//     // 检测是否有模式状态发送变化
//     if (!change_event.empty()) {
//       // 根据状态依次改变对应按钮
//       for (auto& event : change_event) {
//         auto mode = event.mode;
//         auto text = qbe::drawingBoard::State::modeToString(mode);
//         auto qtext = QString::fromStdString(text);
//         auto button = button_map[qtext];

//         button->setEnabled(event.enterable);
//       }
//     }

//     auto current_event = bus.receive<qbe::drawingBoard::ModeCurrentEvent>();

//     if (!current_event.empty()) {
//       auto it = button_map.begin();
//       while (it != button_map.end()) {
//         it->second->setDown(false);
//         it++;
//       }

//       auto event_back = current_event.back();
//       {
//         auto text = qbe::drawingBoard::State::modeToString(event_back.drawing);
//         auto qtext = QString::fromStdString(text);
//         auto button = button_map[qtext];
//         button->setDown(true);
//       }
//       {
//         auto text = qbe::drawingBoard::State::modeToString(event_back.editing);
//         auto qtext = QString::fromStdString(text);
//         auto button = button_map[qtext];
//         button->setDown(true);
//       }
//       {
//         auto text = qbe::drawingBoard::State::modeToString(event_back.select);
//         auto qtext = QString::fromStdString(text);
//         auto button = button_map[qtext];
//         button->setDown(true);
//       }
//     }
//   }

//   static StateDialog* Instane() {
//     static StateDialog* instance = new StateDialog;
//     static bool first = true;

//     if (first) {
//       instance->init();
//       instance->show();
//       first = false;
//     }

//     return instance;
//   }

//  private:
//   void clearButtons() {
//     // Clear buttons from all layouts
//     clearLayout(buttonLayout1);
//     clearLayout(buttonLayout2);
//     clearLayout(buttonLayout3);

//     // Clear the buttons
//     button_map.clear();
//   }

//   void clearLayout(QHBoxLayout* layout) {
//     while (QLayoutItem* item = layout->takeAt(0)) {
//       delete item->widget();
//       delete item;
//     }
//   }

//   QVBoxLayout* mainLayout;
//   QHBoxLayout* buttonLayout1;
//   QHBoxLayout* buttonLayout2;
//   QHBoxLayout* buttonLayout3;

//   std::unordered_map<QString, QPushButton*> button_map;

//   QHBoxLayout* buttonLayout;
// };